在NumPy中如何创建一个空的数组/矩阵?

您所在的位置:网站首页 numpy 矩阵 在NumPy中如何创建一个空的数组/矩阵?

在NumPy中如何创建一个空的数组/矩阵?

#在NumPy中如何创建一个空的数组/矩阵?| 来源: 网络整理| 查看: 265

如何以我通常使用列表(List)的方式使用Numpy数组或矩阵? 我想创建一个空的数组(或矩阵),然后每次添加一列(或行)到这个数组(或矩阵)。

目前能想到的方法是:

mat = None for col in columns: if mat is None: mat = col else: mat = hstack((mat, col))

而如果它是一个列表,我会这样做:

list = [] for item in data: list.append(item)

有没有办法在NumPy中这样使用数组或矩阵?

最佳解决方案

上面对Numpy的使用观念可能有误。 NumPy数组存储在连续的内存块中,如果要将行或列添加到现有数组中,则需要将整个数组复制到一个新的内存块,从而为要存储的新元素创建间隙。如果重复建立一个数组,这是非常低效的。

在添加行的情况下,最好的办法是创建一个与您的数据集最终大小一样的数组,然后向其中按行添加数据:

>>> import numpy >>> a = numpy.zeros(shape=(5,2)) >>> a array([[ 0., 0.], [ 0., 0.], [ 0., 0.], [ 0., 0.], [ 0., 0.]]) >>> a[0] = [1,2] >>> a[1] = [2,3] >>> a array([[ 1., 2.], [ 2., 3.], [ 0., 0.], [ 0., 0.], [ 0., 0.]])

次佳解决方案

NumPy数组是一个与列表非常不同的数据结构,它被设计为以不同的方式使用。您对hstack的使用可能非常低效……每当您调用它时,现有数组中的所有数据都将被复制到一个新的数据中。 (append函数将有相同的问题。)如果您想一次构建您的只有一个列的矩阵,最好将它保存在列表中,直到它完成,然后才转换为一个数组。

例如

mylist = [] for item in data: mylist.append(item) mat = numpy.array(mylist)

item可以是一个列表,一个数组或任何可迭代的结构,只要每个item具有相同数量的元素。在这个特定的情况下(data是一些迭代持有矩阵列),你可以简单地使用

mat = numpy.array(data)

(还要注意,使用list作为变量名可能不是一个好的做法,因为它掩盖了内置类型的名称,这可能会导致错误。)

编辑:

如果由于某种原因,你真的想创建一个空的数组,你可以使用 numpy.array([]),但这是很少有用的!

第三种解决方案

在NumPy中创建一个空的多维数组(例如一个二维数组m*n来存储你的矩阵),如果你不知道(m)你会追加多少行,而不关心计算成本(即在每次附加元素时re-buildinging数组),您可以设置0为要添加到的维度:X = np.empty(shape=[0, n])。

这样你可以使用例如(这里我们假设我们不知道什么时候创建空矩阵m = 5和n = 2):

import numpy as np n = 2 X = np.empty(shape=[0, n]) for i in range(5): for j in range(2): X = np.append(X, [[i, j]], axis=0) print X

这会给你:

[[ 0. 0.] [ 0. 1.] [ 1. 0.] [ 1. 1.] [ 2. 0.] [ 2. 1.] [ 3. 0.] [ 3. 1.] [ 4. 0.] [ 4. 1.]]

numpy

参考文献 How do I create an empty array/matrix in NumPy?



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3